<?php

App::uses('AppModel', 'Model');

class Recuperacion extends AppModel
{
    var $useTable = 'recuperaciones';

    public function getLastBankByRfc($rfc)
    {
        $users = $this->query("
            SELECT cuenta_bancaria
            FROM recuperaciones
            WHERE rfc LIKE ?
            ORDER BY fecha DESC
            LIMIT 1", array(
            $rfc));
        return count($users) > 0 ? $users[0]['recuperaciones']['cuenta_bancaria'] : null;
    }

    public function insertManualEntry($credito, $anio, $mes, $monto, $cuenta, $liquidacion = 1)
    {
        $dt = new DateTime();
        $rfc = $credito['rfc'];
        if (strlen($credito['rfc']) > 10)
        {
            /// Le quitamos la homoclave
            $rfc = substr($credito['rfc'], 0, 10);
        }
        $data = array();
        $data['id_credito'] = $credito['id']; #Id del crédito
        $data['id_archivo'] = null; #Como no se origina de una migración
        $data['fecha'] = $dt->format('Y-m-d'); #Fecha en que se genera el registro
        $data['anio'] = $anio;
        $data['mes'] = $mes;
        $data['rfc'] = $rfc;
        $data['concepto'] = 'DESC PRESTAMO';
        $data['monto'] = $monto;
        $data['monto_cadena'] = (int) $monto * 100;
        $data['cuenta_bancaria'] = $cuenta;
        $data['liquidacion'] = $liquidacion;
        $data['codigo'] = 0; #Entradas manuales se consideran pagos correctos
        $data['tipo'] = 2; #Bandera que indica que el pago fue manual
        $data['fecha_migracion'] = null; #Ya que no es una migración
        $this->save($data);
    }

    public function getByRfc($rfc)
    {
        set_time_limit(3600);
        $this->query("SET lc_time_names = 'es_MX'");
        $recuperaciones = $this->query("
            SELECT 
                recuperacion.monto
              , recuperacion.pago_exitoso
              , recuperacion.cuenta_bancaria
              , d
              , DATE_FORMAT(d,'%m-%y') dateShort
              , UPPER(DATE_FORMAT(d,'%M %Y')) dateLong
              , CASE recuperacion.codigo
                    WHEN 0 THEN 'OK'
                    WHEN 1 THEN 'CUENTA INEXISTENTE'
                    WHEN 3 THEN 'CUENTA CANCELADA'
                    WHEN 4 THEN 'INSUFICIENCIA DE FONDOS'
                    WHEN 20 THEN 'INDOMICILIADO'
                    ELSE CONCAT('ERROR [', recuperacion.codigo, ']')
              END observacion
              , anio*12+mes mes_absoluto
            FROM
            (
                  SELECT 
                      STR_TO_DATE(CONCAT(anio,' ',mes,' 01'),'%Y %m %d') + INTERVAL 1 MONTH d
                    , b.monto
                    , min(codigo) codigo
                    , IF(min(b.codigo) = 0, 1, 0) pago_exitoso
                    , b.cuenta_bancaria
                    , anio
                    , mes
                  FROM recuperaciones b
                  WHERE b.rfc LIKE ? AND b.concepto LIKE 'DESC PRESTAMO%'
                  GROUP BY anio, mes
            ) recuperacion
            ORDER BY d ASC", array($rfc));
        foreach ($recuperaciones as $key => $recuperacion)
        {
            $recuperaciones[$key]['recuperacion']['pago_exitoso'] = $recuperacion['recuperacion']['pago_exitoso'] == '1';
        }
        return $recuperaciones;
    }
}
